/*
 * @lc app=leetcode.cn id=152 lang=javascript
 *
 * [152] 乘积最大子数组
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */

// f[i][0]: 第i位置的最大值， f[i][1]: 第i位置的最小值
var maxProduct = function(nums) {
  let n = nums.length;
  let f = new Array(n);
  for (let i = 0; i < n; i++) f[i] = new Array(2);
  f[0][0] = f[0][1] = nums[0];
  let ans = f[0][0];

  for (let i = 1; i < n; i++) {
    if(nums[i] < 0) {
      [ f[i-1][0], f[i-1][1] ] = [f[i-1][1], f[i-1][0]];
    }
    f[i][0] = Math.max(f[i - 1][0] * nums[i], nums[i]);
    f[i][1] = Math.min(f[i - 1][1] * nums[i], nums[i]);
    ans = Math.max(f[i][0], ans);
  }
  return ans;
};
// @lc code=end

